package com.dunjx.producer;

import com.rabbitmq.client.*;

public class Provider {
    public static void main(String[] args) {
        //所有的中间件技术都是基于tcp/ip协议基础之上构建新型的协议规范，只不过rabbitmq遵循的是amqp协议
        //只要基于tcp/ip协议就肯定会有 ip 和 port
        //TODO 1：创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("39.103.219.84");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("admin");
        connectionFactory.setPassword("admin");
        connectionFactory.setVirtualHost("/");//设置虚拟返回节点 默认是/
        //TODO 2：创建连接Connection
        Connection connection = null;
        Channel channel = null;
        try {
            connection = connectionFactory.newConnection("Simple_Provider");
            //TODO 3：获取连接通道Channel
            channel = connection.createChannel();
            //TODO 4：通过创建交换机，声明队列，绑定关系，路由key，发送消息和接收消息
            String queueName = "queue1"; // 设置一个队列的名字
            /**
             * 声明一个队列
             * @params1 是队列的名字
             * @params2 是否要持久化，durable=false 所谓的持久化就是是否存盘，如果是false>非持久化、true>持久化！  非持久化会存盘吗？会存盘，但是会随着服务器重启而丢失
             * @params3 排他性，是否是一个独占队列【一般情况下不会设置独占队列】false>不是
             * @params4 是否自动删除，就是随着最后一个消费者消费完之后会不会自动删除队列false>不自动删除
             * @params5 携带附属参数，因为我这里没参数所以设置为null
             */
            channel.queueDeclare(queueName,false,false,false,null);
            //TODO 5：准备发送消息的内容
            String msg = "南大大的RabbitMQ";
            //TODO 6：发送消息给队列queue
            /**
             * @params1
             * @params1 要发送到的队列名字
             * @params1 是否要持久化 MessageProperties.PERSISTENT_BASIC 可以自己点进去看看源码有持久化方式
             * @params1 要传递的内容
             */
            channel.basicPublish("",queueName,null,msg.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //TODO 7：关闭通道
            if (channel!=null&&channel.isOpen()){
                try {
                    channel.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            //TODO 8：关闭连接
            if (connection!=null&&connection.isOpen()){
                try {
                    connection.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

